// Copyright 2008 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package androidx.gdata.blogger.xml;

import androidx.gdata.Author;
import androidx.gdata.xml.AuthorDeserializer;
import androidx.gdata.xml.ThingWithLinksDeserializer;
import androidx.gdata.xml.GeneratorDeserializer;
import androidx.gdata.xml.CategoryDeserializer;
import androidx.gdata.xml.TitleDeserializer;
import androidx.gdata.LinkUrl;
import androidx.gdata.Generator;
import androidx.gdata.OpenSearch;
import androidx.gdata.Category;
import androidx.gdata.Title;
import androidx.gdata.blogger.BlogEntryCollection;
import androidx.gdata.blogger.BlogEntry;

import org.w3c.dom.Node;

import java.util.List;

/**
 * @author jennings
 *         Date: Nov 7, 2008
 */
public class BlogEntryCollectionDeserializer extends ThingWithLinksDeserializer<BlogEntryCollection> {
  private static BlogEntryDeserializer blogEntryBuilder = new BlogEntryDeserializer();
  private static AuthorDeserializer authorBuilder = new AuthorDeserializer();
  private static GeneratorDeserializer generatorBuilder = new GeneratorDeserializer();
  private static CategoryDeserializer categoryBuilder = new CategoryDeserializer();
  private static TitleDeserializer titleBuilder = new TitleDeserializer();

  public BlogEntryCollection build(Node feedNode) {
    node = feedNode;
    String id = getText("id");
    String updated = getText("updated");
    Category category = null;
    Node categoryNode = getChildNode("category");
    if (categoryNode != null) {
      category = categoryBuilder.build(categoryNode);
    }
    Node titleNode = getChildNode("title");
    Title title = titleBuilder.build(titleNode);
    Node subtitleNode = getChildNode("subtitle");
    Title subtitle = titleBuilder.build(subtitleNode);

    String totalResults = getText("openSearch:totalResults");
    String startIndex = getText("openSearch:startIndex");
    String itemsPerPage = getText("openSearch:itemsPerPage");
    OpenSearch openSearch = new OpenSearch(totalResults, startIndex, itemsPerPage);
    Node authorNode = getChildNode("author");
    Author author = authorBuilder.build(authorNode);
    Node generatorNode = getChildNode("generator");
    Generator generator = generatorBuilder.build(generatorNode);
    List<Node> entryNodes = getChildNodes("entry");
    BlogEntry[] entries = new BlogEntry[entryNodes.size()];
    int i = 0;
    for (Node entryNode : entryNodes) {
      BlogEntry entry = blogEntryBuilder.build(entryNode);
      entries[i++] = entry;
    }
    LinkUrl[] links = getLinks();
    return new BlogEntryCollection(id, updated, category, title, subtitle, links, entries,
        author, generator, openSearch);
  }
}